在手機上有許多不同的感應器,例如陀螺儀、加速計、重力傳感器、磁場感測器等
透過SensorManager,可以向不同的感應器取得相對應的數值,這次透過Accelerometer(加速度感應器)判斷手機是否被搖晃
為了防止圖片在搖晃過程中不斷改變,先設置一個變數,依照這個變數作為是否要更換圖片的依據
private var isReplaceable = true
fun changeImage() {
if(isReplaceable) {
isReplaceable = false
//使用亂數決定更換成哪張圖片
when((Math.random()*6).toInt()){
0 -> imageView.setImageResource(R.drawable.one)
1 -> imageView.setImageResource(R.drawable.two)
2 -> imageView.setImageResource(R.drawable.three)
3 -> imageView.setImageResource(R.drawable.four)
4 -> imageView.setImageResource(R.drawable.five)
else -> imageView.setImageResource(R.drawable.six)
}
//啟動Thread
thread()
}
利用Thread延遲1秒,再將isReplaceable
設為true
fun thread(){
Thread(Runnable {
//延遲1秒
Thread.sleep(1000)
//讓圖片可以再次更換
isReplaceable = true
}).start()
}
建立RegisterListener接收得到的數據
val sensorListener = object: SensorEventListener {
override fun onAccuracyChanged(p0: Sensor?, p1: Int) {}
override fun onSensorChanged(event: SensorEvent?) {
if(event != null){
//取得個三軸的加速度
val xValue = Math.abs(event.values[0])
val yValue = Math.abs(event.values[1])
val zValue = Math.abs(event.values[2])
if (xValue > 15 || yValue > 15 || zValue > 15) {
//當被搖晃時改變圖片
changeImage()
}
}
}
}
取得SensorManager
val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
sensorManager.registerListener(sensorListener, sensor, SensorManager.SENSOR_DELAY_NORMAL)